import 'dart:convert';

import './storage.dart';
import '../config/config.dart';
 /*
      1、获取本地存储的cartList数据
      2、判断cartList是否有数据
            有数据：
                1、判断购物车有没有当前数据：
                        有当前数据：
                            1、让购物车中的当前数据数量 等于以前的数量+现在的数量
                            2、重新写入本地存储

                        没有当前数据：
                            1、把购物车cartList的数据和当前数据拼接，拼接后重新写入本地存储。

            没有数据：
                1、把当前商品数据以及属性数据放在数组中然后写入本地存储
                List list=[
                  {"_id": "1", 
                    "title": "磨砂牛皮男休闲鞋-有属性", 
                    "price": 688, 
                    "selectedAttr": "牛皮 ,系带,黄色", 
                    "count": 4, 
                    "pic":"public\upload\RinsvExKu7Ed-ocs_7W1DxYO.png",
                    "checked": true
                  },  
                    {"_id": "2", 
                    "title": "磨xxxxxxxxxxxxx", 
                    "price": 688, 
                    "selectedAttr": "牛皮 ,系带,黄色", 
                    "count": 2, 
                    "pic":"public\upload\RinsvExKu7Ed-ocs_7W1DxYO.png",
                    "checked": true
                  }              
                ];
      */

class CartService{

  static final key = 'cartList';

  static addCart(item) async{
    /// 把对象转换成Map类型的数据
    item = formatCartData(item);

    // print(item);

    try {
      List cartList = json.decode(await Storage.getString(key));

      /// 判断购物出有没有当前数据
      bool hasData = cartList.any((element) {
        return element['_id'] == item['_id'] && element['selectedAttr'] == item['selectedAttr'];
      });  

      if(hasData) {
        for(var i=0;i<cartList.length;i++) {
          if(cartList[i]['_id'] == item['_id'] && cartList[i]['selectedAttr'] == item['selectedAttr']) {
            cartList[i]['count'] += 1;
          }
        }
      } else {
        cartList.add(item); 
      }
      Storage.setString(key, json.encode(cartList));


    } catch (e) {
      /// 报错说明没有数据
      List tempList = [];
      tempList.add(item);
      Storage.setString(key, json.encode(tempList));
    }

  }

  /// 过滤数据
  static formatCartData(item) {
    /// 处理图片
    String pic = item.pic;
    pic = Config.domain + pic.replaceAll('\\', '/');

    final Map data = new Map<String, dynamic>();
    data['_id'] = item.sId;
    data['title'] = item.title;
    // 处理string和int类型的价格
    if(item.price is int || item.price is double) {
      data['price'] = item.price;
    } else{
      data['price'] = double.parse(item.price);
    }
    data['selectedAttr'] = item.selectedAttr;
    data['count'] = item.count;
    data['pic'] = pic;
    data['checked'] = true; // 是否选中
    return data;
  }

  /// 获取购物车选中的数据
  static getCheckoutData() async{
    List cartList = [];
    List tempCheckoutData = [];

    try {
      cartList = json.decode(await Storage.getString(key));
    } catch(e) {
      cartList = [];
    }

    for(var i=0;i<cartList.length;i++) {
      if(cartList[i]['checked']) {
        tempCheckoutData.add(cartList[i]);
      }
    }

    return tempCheckoutData;

  }

}